/**
 * create By Jane
 * 通用的数据处理和验证类
 */
export default class Utils {
    /**
     * 检查是否为空数组 空数组返回 true
     * @param {Array} arr 数组
     * @return Boolean
     */
    static isEmptyArr(arr) {
        if (!Array.isArray(arr)) throw new Error('isEmptyArr 参数不是一个数组');
        if (!arr.length) return true;
        return false;
    }

    /**
     * 是否是空  不为空false 为空true
     * @param {any} opt 验证参数
     * @return Boolean
     */
    static isNull(opt) {
        if (opt == '' || opt == null || opt == undefined) return true;
        return false;
    }

    /**
     * 校验手机号格式
     * @param phone
     * @returns {boolean}
     */
    static checkPhone(phone) {
        let reg = /^1[3456789]\d{9}$/;
        return reg.test(phone);
    }

    /**
     * 校验邮箱格式
     * @param email
     * @returns {boolean}
     */
    static checkEmail(email) {
        let reg = /^\w+@[a-z0-9]+\.[a-z]{2,4}$/;
        return reg.test(email);
    }

    /**
     * 校验身份证号格式
     * @param email
     * @returns {boolean}
     */
    static checkCardNo(email) {
        let reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
        return reg.test(email);
    }

    /**
     * 校验值长度 不少于6位数
     * @param email
     * @returns {boolean}
     */
    static checkValueLength(password, min = 6, max = 0) {
        let regExp = new RegExp(`^[\\s\\S]{${min || ''},${max || ''}}$`);
        return regExp.test(password);
    }

    /**
     * 电话号码加密
     */
    static phoneEncryption(phone) {
        return phone.replace(/^(\d{3})\d{4}(\d+)/, '$1****$2')
    }

    /**
     * 生成随机数字
     * @param {*} length  长度
     */
    static randNumber(length = 6) {
        let code = "";
        for (let i = 0; i < length; i++) {
            let radom = Math.floor(Math.random() * 10);
            code += radom;
        }
        return code;
    }

    /**
     * 处理数据 ：可把制定相同的key值得对象存储到下级得children中
     * @param {*} list
     * @param {*} key
     * @param {*} name
     */
    static mergeData(list = [], key, name = 'children') {
        const data = [];
        list.forEach((item) => {
            const parent = data.find((i) => i[key] === item[key]);
            if (parent) {
                parent[name].push({
                    ...item
                });
            } else {
                let obj = {
                    ...item
                };
                if (!obj[name]) {
                    obj[name] = [];
                }
                obj[name].push({
                    ...item
                });
                data.push(obj);
            }
        });
        return data;
    }

}
